package com.zw.a.basic.a12.demo04_inputstream;

import java.io.FileInputStream;
import java.io.IOException;

//案例: 字节输入流 一次读取一个字节数组.
/*
    FileInputStream: 普通的字节输入流, 以字节为单位读取数据.

    构造方法:
        public FileInputStream(String path);
        public FileInputStream(File path);

    成员方法:
        public int read();              一次读一个字节, 并返回读取到的该字节的ASCII码值, 读不到返回-1
        public int read(byte[] bys);    一次读一个字节数组, 并返回读取到的有效字节数,
                                        并将读取到的数据封装到字节数组中, 读不到返回-1
        public void close();
 */
public class Demo02 {
    public static void main(String[] args) throws IOException {
        //1. 创建字节输入流对象, 封装数据源文件.    数据源文件必须存在, 不然报错.
        FileInputStream fis = new FileInputStream("day12/data/1.txt");
        //2. 一次读一个字节数组
        //合并版
        //2.1 定义字节数组, 记录读取到的数据.
        byte[] bys = new byte[3];       //字节数组的长度: 一般是1024的整数倍.  初始值: 0, 0, 0
        int len = 0;                    //记录读取到的有效字节数.

        /*
            (len = fis.read(bys)) != -1  这行代码做了3件事
                1. 执行fis.read(bys),         一次读取一个字节数组, 并把读取到的内容存储到bys数组中.
                2. 执行len = fis.read(bys)    将读取到的有效字节数赋值给变量len
                3. 执行len != -1              如果len不等于-1, 说明读到内容了, 进循环.
         */
        while((len = fis.read(bys)) != -1) {
            System.out.println(new String(bys,0, len ));
        }
        //3. 关流.
        fis.close();



        //分解版
        /*//第一次读取
        int len1 = fis.read(bys);       //bys: abc(97, 98, 99),  len1 = 3
        String s1 = new String(bys, 0, len1);
        System.out.println(s1);
        System.out.println(len1);
        System.out.println("----------------------");

        //第二次读取
        int len2 = fis.read(bys);       //bys: dbc(100, 98, 99),  len2 = 1
        String s2 = new String(bys, 0, len2);
        System.out.println(s2);
        System.out.println(len2);*/


    }
}
